Autoyaのlink.xml Generator作った回
概要
Autoya 0.9.5のリリースが完了した。
このリリースでは、わりと「ずっと前から欲しかったんだけど入れられなかった機能」みたいなのを入れた。
・link.xml を生成する機構
・AssetGraphでAssetBundleをビルドした時についでにlink.xmlを合成出力する機構
・こまかなバグフィックス
などが更新内容。
このなかで、AssetGraph -> AB作成 -> link.xml生成が熱い。
AssetBundleとアプリ内含有Assetの関係
iOSとかAndroidでのAssetBundleの使用がマストなので、こう、
「そのABに入ってるAssetはコンパイルに含まれてないのでロードした瞬間、死!!!」
みたいなのが怖い。
そこでいろいろな方法があるわけなんだけど、
Autoyaでは、link.xmlを生成することで対処した。
link.xml Generator
AssetのクラスID値(int)を与えるとlink.xmlを吐き出す。
これ。
単体で抜き出しても使えるので、興味ある人はどうぞ。
で、ここで渡すクラスID値とは何か。
間違ってもここのこれではない
https://docs.unity3d.com/Manual/ClassIDReference.html
この資料ほんんんんんんっっっっっっっっっとーに最悪なことに、間違いまくっている。
なので、クラスID値を知りたい人は、
とりあえずAssetBundleをビルドしてmanifestファイルを見よう。
こんな感じのやつが出てくる。
ManifestFileVersion: 0
CRC: 2200902407
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: c088a4b2797e99ed3c95d8ce957816af
TypeTreeHash:
serializedVersion: 2
Hash: 11817dad4d3c8e9c24248d58700284ea
HashAppended: 0
ClassTypes:
- Class: 1
Script: {instanceID: 0}
- Class: 4
Script: {instanceID: 0}
- Class: 23
Script: {instanceID: 0}
- Class: 102
Script: {instanceID: 0}
- Class: 114
Script: {fileID: 11500000, guid: 7e73406419bf54a50a1b5faf24749c6c, type: 3}
- Class: 115
Script: {instanceID: 0}
Assets:
- Assets/AutoyaTests/RuntimeData/AssetBundles/MainResources/nestedPrefab.prefab
Dependencies:
- /Users/passepied/Desktop/autoya/Editor/AssetGraph-1.3-release/UnityEngine.AssetBundleGraph/Cache/AssetBundles/4e024a18-af2d-4f29-9f4b-1212e005d1ea/iOS/texturename1
ここの、Class: 1 とかが、「そのABに含まれているAssetの」「Unity内での」クラスIDの値になっている。
ほらね、簡単でしょう?
この数値はmetaファイルとかからは取得できない。できたら別のアプローチとかもあると思うんだけど。
現状のまとめ
Autoyaでは、AssetBundleを作成する際にAssetGraphを使っており、AGのビルド時に独自のAssetBundleListを作る機構を提供している。
で、
List作成のついでに、ビルドしたAssetBundleのmanifestから、ABに含まれる全てのAssetのクラスIDを収集し、
そのIDをもとにlink.xmlを生成している。
すでにファイルがある場合は必要な分をマージする。
これによって、複数のAGのグラフからABをビルドしても一つのlink.xmlがいい感じに太っていくようになる。